package com.hiraeth.modules.monitor.model;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.hiraeth.modules.monitor.model.alert.Alerting;
import com.hiraeth.modules.monitor.model.global.GlobalConfig;
import com.hiraeth.modules.monitor.model.remote.RemoteRead;
import com.hiraeth.modules.monitor.model.remote.RemoteWrite;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * prometheus配置文件映射
 * @see https://prometheus.io/docs/prometheus/latest/configuration/configuration
 * @author xuning
 *
 */
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class PrometheusConfig implements Serializable {
	
	private static final long serialVersionUID = 153343367009795392L;

	/*
	<duration>：匹配正则表达式 [0-9]+(ms|[smhdwy])的持续时长
	<labelname>：匹配正则表达式[a-z_a-Z_][a-z_a-Z0-9_]*的字符串
	<labelvalue>：unicode字符串
	<filepath>：在当前工作目录的有效路径
	<boolean>：一个可以取true或false值的布尔值
	<string>：常规字符串
	<secret>：保密的常规字符串，如密码
	<tmpl_string>：在使用之前经过模板扩展的字符串
	<tmpl_secret>：在使用之前模板扩展的字符串，这是一个secret
	*/
	
	@JSONField(ordinal = 1)
	private GlobalConfig global;
	
	/**
	 * 规则文件列表
	 */
	@JSONField(ordinal = 2)
	private List<String> rule_files;
	
	/**
	 * 抓取配置列表
	 */
	@JSONField(ordinal = 3)
	private List<ScrapeConfig> scrape_configs;
	
	/**
	 * Alerting指定与Alertmanager相关的设置。
	 */
	@JSONField(ordinal = 4)
	private Alerting alerting;
	
	/**
	 * 与远程写入功能相关的设置.
	 */
	@JSONField(ordinal = 5)
	private List<RemoteWrite> remote_write;
	
	/**
	 * 与远程读取功能相关的设置.
	 */
	@JSONField(ordinal = 6)
	private List<RemoteRead> remote_read;
}
